<?php
/**
 * TRoom - Passerelle vers la table room
 * 
 * @package application
 * @subpackage models
 */
class TRoom extends Zend_Db_Table_Abstract
{
    /**
     * Nom de la table
     *
     * @var string
     */
    protected $_name = 'room';
    
    /**
     * Nom de la clé primaire
     *
     * @var string
     */
    protected $_primary = 'id';
    
    /**
     * Nom de la classe des enregistrements
     *
     * @var string
     */
    protected $_rowClass = 'Zfbook_Db_Table_Row';
    
    /**
     * Nom de la classe des jeux d'enregistrements
     *
     * @var string
     */
    protected $_rowsetClass = 'Zfbook_Db_Table_Rowset';
    
    /**
     * Est-ce qu'une salle est libre sur une période donnée ?
     *
     * @param integer $roomId
     * @param Zend_Date $debut
     * @param Zend_Date $fin
     * @return boolean
     */
    public function isAvailableAtPeriod($roomId, Zend_Date $debut, Zend_Date $fin)
    {
        $select = $this->_db->select();
        $select->from(array('r'=>'reservation'), 'id_room')
               ->where("UNIX_TIMESTAMP(date_begin) BETWEEN {$debut->getTimestamp()} AND {$fin->getTimestamp()}")
               ->orWhere("UNIX_TIMESTAMP(date_end)  BETWEEN {$debut->getTimestamp()} AND {$fin->getTimestamp()}")
               ->orWhere($this->_db->quoteInto('UNIX_TIMESTAMP(date_end)<?',$debut->getTimestamp()))
               ->where('r.id_room = ?', (int) $roomId, Zend_Db::INT_TYPE);
        return !$select->query()->rowCount();
    }
    
    /**
     * Nombre de jours de réservation d'une salle donnée
     * 
     * @param integer $roomId
     * @return integer
     */
    public function getReservedDaysCount($roomId)
    {
        $select = $this->_db->select();
        $select->from(array('r'=>'reservation'),array('count'=>'UNIX_TIMESTAMP(date_end)-UNIX_TIMESTAMP(date_begin)'))
               ->where('id_room=?',(int) $roomId,Zend_Db::INT_TYPE)
               ->where('UNIX_TIMESTAMP(date_end)>?',Zend_Date::now()->getTimestamp());
        return (int) ceil(array_sum(array_keys($this->_db->fetchAll($select,null,Zend_Db::FETCH_GROUP))) / 86400);
    }
}
